<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Jenkins入门 | 小阳爱技术</title>
    <meta name="generator" content="VuePress 1.9.5">
    <link rel="icon" href="/img/favicon.ico">
    <link rel="icon" href="/favicon.ico">
    <link rel="manifest" href="/manifest.json">
    <meta name="description" content="Python, Linux, Nginx, Django, Flask, WEB, 前端, Java 全栈知识体系, java体系, java知识体系, java框架,java详解,java学习路线,java spring, java面试, 知识体系, java技术体系, java编程, java编程指南,java开发体系, java开发,java教程,java,java数据结构, 算法, 开发基础">
    <meta name="keywords" content="Python, Linux, Nginx, Django, Flask, WEB, 前端, Java 全栈知识体系, java体系, java知识体系, java框架,java详解,java学习路线,java spring, java面试, 知识体系, java技术体系, java编程, java编程指南,java开发体系, java开发,java教程,java,java数据结构, 算法, 开发基础">
    <meta name="theme-color" content="#11a8cd">
    <meta name="robots" content="all">
    <meta name="author" content="小阳爱技术">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    
    <link rel="preload" href="/assets/css/0.styles.8cb71cba.css" as="style"><link rel="preload" href="/assets/js/app.9f33dad1.js" as="script"><link rel="preload" href="/assets/js/2.336839c5.js" as="script"><link rel="preload" href="/assets/js/27.23a56743.js" as="script"><link rel="prefetch" href="/assets/js/10.78490e0e.js"><link rel="prefetch" href="/assets/js/11.358c0655.js"><link rel="prefetch" href="/assets/js/12.3d907ab6.js"><link rel="prefetch" href="/assets/js/13.e005782a.js"><link rel="prefetch" href="/assets/js/14.5c1831ed.js"><link rel="prefetch" href="/assets/js/15.3dae17f7.js"><link rel="prefetch" href="/assets/js/16.caf002bb.js"><link rel="prefetch" href="/assets/js/17.96d97c18.js"><link rel="prefetch" href="/assets/js/18.6f49a065.js"><link rel="prefetch" href="/assets/js/19.a72a1b44.js"><link rel="prefetch" href="/assets/js/20.5dbbd998.js"><link rel="prefetch" href="/assets/js/21.3b5c9825.js"><link rel="prefetch" href="/assets/js/22.588d1d79.js"><link rel="prefetch" href="/assets/js/23.bb2ba1d1.js"><link rel="prefetch" href="/assets/js/24.2036f1ef.js"><link rel="prefetch" href="/assets/js/25.7b40ded3.js"><link rel="prefetch" href="/assets/js/26.51a93ad7.js"><link rel="prefetch" href="/assets/js/28.2bfb83a2.js"><link rel="prefetch" href="/assets/js/29.b8c6cf94.js"><link rel="prefetch" href="/assets/js/3.00f81f09.js"><link rel="prefetch" href="/assets/js/30.fe19a5d5.js"><link rel="prefetch" href="/assets/js/31.b68040bb.js"><link rel="prefetch" href="/assets/js/32.d9d3dba8.js"><link rel="prefetch" href="/assets/js/33.59561c54.js"><link rel="prefetch" href="/assets/js/34.243786a2.js"><link rel="prefetch" href="/assets/js/35.daf1b05e.js"><link rel="prefetch" href="/assets/js/36.13258281.js"><link rel="prefetch" href="/assets/js/37.4b591e31.js"><link rel="prefetch" href="/assets/js/38.13d6ce06.js"><link rel="prefetch" href="/assets/js/39.c51dd517.js"><link rel="prefetch" href="/assets/js/4.72262f85.js"><link rel="prefetch" href="/assets/js/40.227cf12d.js"><link rel="prefetch" href="/assets/js/41.8ada8611.js"><link rel="prefetch" href="/assets/js/42.b168f326.js"><link rel="prefetch" href="/assets/js/43.9df968fc.js"><link rel="prefetch" href="/assets/js/44.1546c9b1.js"><link rel="prefetch" href="/assets/js/45.c29bc1da.js"><link rel="prefetch" href="/assets/js/46.2de30989.js"><link rel="prefetch" href="/assets/js/47.34b5ca9a.js"><link rel="prefetch" href="/assets/js/5.56d0fbc7.js"><link rel="prefetch" href="/assets/js/6.b9ff2c2e.js"><link rel="prefetch" href="/assets/js/7.41c828d4.js"><link rel="prefetch" href="/assets/js/8.82412463.js"><link rel="prefetch" href="/assets/js/9.c499cdfa.js">
    <link rel="stylesheet" href="/assets/css/0.styles.8cb71cba.css">
  </head>
  <body class="theme-mode-light">
    <div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu"><header class="navbar blur"><div title="目录" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/img/logo.png" alt="小阳爱技术" class="logo"> <span class="site-name can-hide">小阳爱技术</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Python" class="dropdown-title"><a href="/python" class="link-title">Python</a> <span class="title" style="display:none;">Python</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/4e044c/404" class="nav-link">暂无</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="DevOPs" class="dropdown-title"><a href="/devops/" class="link-title">DevOPs</a> <span class="title" style="display:none;">DevOPs</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>Git</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Git核心命令</a></li></ul></li><li class="dropdown-item"><h4>GitLab</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Gitlab基础</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">CI/CD语法</a></li></ul></li><li class="dropdown-item"><h4>Jernkins</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Jenkins入门</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Pipeline流水线语法</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Jenkins集成各种工具</a></li></ul></li><li class="dropdown-item"><h4>企业级流水线案例</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">企业级流水线的两个场景</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Npm企业流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Java企业级流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Python企业级流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Golang企业级流水线案例</a></li></ul></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="更多" class="dropdown-title"><a href="/more/" class="link-title">更多</a> <span class="title" style="display:none;">更多</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/f2a556/" class="nav-link">学习</a></li><li class="dropdown-item"><!----> <a href="/pages/aea6571b7a8bae86/" class="nav-link">面试</a></li><li class="dropdown-item"><!----> <a href="/pages/2d615df9a36a98ed/" class="nav-link">心情杂货</a></li><li class="dropdown-item"><!----> <a href="/pages/baaa02/" class="nav-link">实用技巧</a></li></ul></div></div><div class="nav-item"><a href="/about/" class="nav-link">关于</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="收藏" class="dropdown-title"><a href="/pages/beb6c0bd8a66cea6/" class="link-title">收藏</a> <span class="title" style="display:none;">收藏</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/beb6c0bd8a66cea6/" class="nav-link">网站</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="索引" class="dropdown-title"><a href="/archives/" class="link-title">索引</a> <span class="title" style="display:none;">索引</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">分类</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">标签</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">归档</a></li></ul></div></div> <a href="https://github.com//" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><div class="blogger"><img src="/img/logo.png"> <div class="blogger-info"><h3>小阳爱技术</h3> <span>数据库管理员 &amp;&amp; 容器云狂热分子</span></div></div> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Python" class="dropdown-title"><a href="/python" class="link-title">Python</a> <span class="title" style="display:none;">Python</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/4e044c/404" class="nav-link">暂无</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="DevOPs" class="dropdown-title"><a href="/devops/" class="link-title">DevOPs</a> <span class="title" style="display:none;">DevOPs</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>Git</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Git核心命令</a></li></ul></li><li class="dropdown-item"><h4>GitLab</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Gitlab基础</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">CI/CD语法</a></li></ul></li><li class="dropdown-item"><h4>Jernkins</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Jenkins入门</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Pipeline流水线语法</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Jenkins集成各种工具</a></li></ul></li><li class="dropdown-item"><h4>企业级流水线案例</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">企业级流水线的两个场景</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Npm企业流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Java企业级流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Python企业级流水线案例</a></li><li class="dropdown-subitem"><a href="/pages/8143cc480faf9a11/" class="nav-link">Golang企业级流水线案例</a></li></ul></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="更多" class="dropdown-title"><a href="/more/" class="link-title">更多</a> <span class="title" style="display:none;">更多</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/f2a556/" class="nav-link">学习</a></li><li class="dropdown-item"><!----> <a href="/pages/aea6571b7a8bae86/" class="nav-link">面试</a></li><li class="dropdown-item"><!----> <a href="/pages/2d615df9a36a98ed/" class="nav-link">心情杂货</a></li><li class="dropdown-item"><!----> <a href="/pages/baaa02/" class="nav-link">实用技巧</a></li></ul></div></div><div class="nav-item"><a href="/about/" class="nav-link">关于</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="收藏" class="dropdown-title"><a href="/pages/beb6c0bd8a66cea6/" class="link-title">收藏</a> <span class="title" style="display:none;">收藏</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/beb6c0bd8a66cea6/" class="nav-link">网站</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="索引" class="dropdown-title"><a href="/archives/" class="link-title">索引</a> <span class="title" style="display:none;">索引</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">分类</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">标签</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">归档</a></li></ul></div></div> <a href="https://github.com//" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>git</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>gitlab</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>jenkins</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/pages/4e044c/" aria-current="page" class="active sidebar-link">Jenkins入门</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header level2"><a href="/pages/4e044c/#jenkins安装和持续集成环境配置" class="sidebar-link">Jenkins安装和持续集成环境配置</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#服务器列表" class="sidebar-link">服务器列表</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-1-jenkins安装" class="sidebar-link">持续集成环境(1)-Jenkins安装</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装jdk" class="sidebar-link">安装JDK</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装jenkins" class="sidebar-link">安装Jenkins</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#安装-nginx-代理-jenkins" class="sidebar-link">安装 Nginx 代理 Jenkins</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#添加-nginx-反向代理配置" class="sidebar-link">添加 Nginx 反向代理配置</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#启动-jenkins-和-nginx" class="sidebar-link">启动 Jenkins 和 Nginx</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#配置-jenkins" class="sidebar-link">配置 Jenkins</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-2-jenkins插件管理" class="sidebar-link">持续集成环境(2)-Jenkins插件管理</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#修改-jenkins-插件下载地址" class="sidebar-link">修改 Jenkins 插件下载地址</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#汉化-jenkins" class="sidebar-link">汉化 Jenkins</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-3-jenkins用户权限管理" class="sidebar-link">持续集成环境(3)-Jenkins用户权限管理</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装-role-based-authorization-strategy-插件" class="sidebar-link">安装 Role-based Authorization Strategy 插件</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#开启权限全局安全配置" class="sidebar-link">开启权限全局安全配置</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#创建角色" class="sidebar-link">创建角色</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#创建用户" class="sidebar-link">创建用户</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#给用户分配角色" class="sidebar-link">给用户分配角色</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#创建项目测试权限" class="sidebar-link">创建项目测试权限</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-4-jenkins凭证管理" class="sidebar-link">持续集成环境(4)-Jenkins凭证管理</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装credentials-binding插件" class="sidebar-link">安装Credentials Binding插件</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装git插件和git工具" class="sidebar-link">安装Git插件和Git工具</a></li><li class="sidebar-sub-header level5"><a href="/pages/4e044c/#git插件安装" class="sidebar-link">Git插件安装</a></li><li class="sidebar-sub-header level5"><a href="/pages/4e044c/#添加-ssh-类型的密钥" class="sidebar-link">添加 SSH 类型的密钥</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-5-参数化构建" class="sidebar-link">持续集成环境(5)-参数化构建</a></li><li class="sidebar-sub-header level3"><a href="/pages/4e044c/#持续集成环境-6-邮件服务" class="sidebar-link">持续集成环境(6)-邮件服务</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#安装email-extension插件" class="sidebar-link">安装Email Extension插件</a></li><li class="sidebar-sub-header level4"><a href="/pages/4e044c/#jenkins设置邮箱相关参数" class="sidebar-link">Jenkins设置邮箱相关参数</a></li><li class="sidebar-sub-header level5"><a href="/pages/4e044c/#设置邮件参数" class="sidebar-link">设置邮件参数</a></li></ul></li></ul></li><li><a href="/pages/c6f51e/" class="sidebar-link">Jenkins流水线语法</a></li><li><a href="/pages/bc4b74/" class="sidebar-link">Jenkins集成各种工具</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>企业级流水线</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>自动化测试流水线</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="articleInfo-wrap" data-v-06225672><div class="articleInfo" data-v-06225672><ul class="breadcrumbs" data-v-06225672><li data-v-06225672><a href="/" title="首页" class="iconfont icon-home router-link-active" data-v-06225672></a></li> <li data-v-06225672><a href="/categories/?category=DevOps" title="分类" data-v-06225672>DevOps</a></li><li data-v-06225672><a href="/categories/?category=jenkins" title="分类" data-v-06225672>jenkins</a></li></ul> <div class="info" data-v-06225672><div title="作者" class="author iconfont icon-touxiang" data-v-06225672><a href="https://blog.abck8s.com" target="_blank" title="作者" class="beLink" data-v-06225672>小阳爱技术</a></div> <div title="创建时间" class="date iconfont icon-riqi" data-v-06225672><a href="javascript:;" data-v-06225672>2022-06-22</a></div> <!----></div></div></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-title">目录</div> <div class="right-menu-content"></div></div></div> <h1><img src="">Jenkins入门<!----></h1>  <div class="theme-vdoing-content content__default"><h1 id="jenkins入门"><a href="#jenkins入门" class="header-anchor">#</a> Jenkins入门</h1> <p>Jenkins 是一款流行的开源持续集成（Continuous Integration）工具，广泛用于项目开发，具有自动 化构建、测试和部署等功能。</p> <p>官网： https://www.jenkins.io/zh/</p> <p>Jenkins的特征：</p> <ul><li>开源的Java语言开发持续集成工具，支持持续集成，持续部署。</li> <li>易于安装部署配置：可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署，方便web界面配置管理。</li> <li>消息通知及测试报告：集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知，生成JUnit/TestNG测试报告。</li> <li>分布式构建：支持Jenkins能够让多台计算机一起构建/测试。</li> <li>文件识别：Jenkins能够跟踪哪次构建生成哪些jar，哪次构建使用哪个版本的jar等。</li> <li>丰富的插件支持：支持扩展插件，你可以开发适合自己团队使用的工具，如git，svn，maven， docker等。</li></ul> <h2 id="jenkins安装和持续集成环境配置"><a href="#jenkins安装和持续集成环境配置" class="header-anchor">#</a> Jenkins安装和持续集成环境配置</h2> <p><img src="/img/image-20220620152743433.png" alt="image-20220620152743433"></p> <ol><li>第一步：开发人员每天进行代码提交，提交到Git仓库</li> <li>第二步：Jenkins作为持续集成工具，使用Git工具到Git仓库拉取代码到集成服务器，再配合JDK， Maven等软件完成代码编译，代码测试与审查，测试，打包等工作，在这个过程中每一步出错，都重新 再执行一次整个流程。</li> <li>第三步：Jenkins把生成的jar或war包分发到测试服务器或者生产服务器，测试人员或用户就可以访问 应用。</li></ol> <h3 id="服务器列表"><a href="#服务器列表" class="header-anchor">#</a> 服务器列表</h3> <p>本课程虚拟机统一采用CentOS7。</p> <table><thead><tr><th>名称</th> <th>IP</th> <th>配置</th> <th>软件</th></tr></thead> <tbody><tr><td>代码托管服务器</td> <td>192.168.15.20</td> <td>2核4GB</td> <td>Gitlab、Gitlab-runner</td></tr> <tr><td>Jenkins服务器</td> <td>192.168.15.21</td> <td>2核2GB</td> <td>Jenkins，JDK1.8，Maven3.6.2,go</td></tr> <tr><td>SonarQube</td> <td>192.168.15.22</td> <td>2核2GB</td> <td>SonarQube</td></tr> <tr><td>测试服务器1</td> <td>192.168.15.23</td> <td>2核2GB</td> <td>JDK1.8，Tomcat9,python,golang</td></tr> <tr><td>测试服务器2</td> <td>192.168.15.24</td> <td>2核2GB</td> <td>JDK1.8，Tomcat9,python,golang</td></tr></tbody></table> <h3 id="持续集成环境-1-jenkins安装"><a href="#持续集成环境-1-jenkins安装" class="header-anchor">#</a> 持续集成环境(1)-Jenkins安装</h3> <blockquote><p>官网：https://www.jenkins.io/zh/download/</p></blockquote> <p>Jenkins是开源CI&amp;CD软件领导者， 提供超过1000个插件来支持构建、部署、自动化， 满足任何项目的需要。</p> <p>Jenkins是用Java开发的，安装Jenkins之前首先需要安装JDK。</p> <h4 id="安装jdk"><a href="#安装jdk" class="header-anchor">#</a> 安装JDK</h4> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ yum <span class="token function">install</span> java-1.8.0-openjdk* -y
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="安装jenkins"><a href="#安装jenkins" class="header-anchor">#</a> 安装Jenkins</h4> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">sudo</span> <span class="token function">wget</span> -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ <span class="token function">sudo</span> <span class="token function">rpm</span> --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
$ yum <span class="token function">install</span> jenkins
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><img src="/img/image-20220620160126741.png" alt="image-20220620160126741"></p> <h3 id="安装-nginx-代理-jenkins"><a href="#安装-nginx-代理-jenkins" class="header-anchor">#</a> 安装 Nginx 代理 Jenkins</h3> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ yum <span class="token function">install</span> nginx -y
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="添加-nginx-反向代理配置"><a href="#添加-nginx-反向代理配置" class="header-anchor">#</a> 添加 Nginx 反向代理配置</h4> <div class="language-nginx line-numbers-mode"><pre class="language-nginx"><code><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
    <span class="token directive"><span class="token keyword">listen</span> <span class="token number">443</span> ssl</span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">server_name</span> jenkins.abck8s.com</span><span class="token punctuation">;</span>

    <span class="token directive"><span class="token keyword">ssl_certificate</span>  /etc/nginx/cert/jenkins.abck8s.com.pem</span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">ssl_certificate_key</span> /etc/nginx/cert/jenkins.abck8s.com.key</span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">ssl_session_timeout</span> <span class="token number">5m</span></span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">ssl_protocols</span> TLSv1 TLSv1.1 TLSv1.2</span><span class="token punctuation">;</span>
    
    <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
        <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$http_host</span></span><span class="token punctuation">;</span>
        <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Real-IP <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
        <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Scheme <span class="token variable">$scheme</span></span><span class="token punctuation">;</span>
        proxy_pass  http://127.0.0.1:8080
    <span class="token punctuation">}</span>
    
<span class="token punctuation">}</span>

<span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
    <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">server_name</span> jenkins.abck8s.com</span><span class="token punctuation">;</span>
    <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> https://<span class="token variable">$server_name</span><span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br></div></div><h4 id="启动-jenkins-和-nginx"><a href="#启动-jenkins-和-nginx" class="header-anchor">#</a> 启动 Jenkins 和 Nginx</h4> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ systemctl <span class="token builtin class-name">enable</span> --now nginx jenkins
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="配置-jenkins"><a href="#配置-jenkins" class="header-anchor">#</a> 配置 Jenkins</h4> <p><img src="/img/image-20220620162605100.png" alt="image-20220620162605100"></p> <p><img src="/img/image-20220620162644718.png" alt="image-20220620162644718"></p> <h3 id="持续集成环境-2-jenkins插件管理"><a href="#持续集成环境-2-jenkins插件管理" class="header-anchor">#</a> 持续集成环境(2)-Jenkins插件管理</h3> <p>Jenkins本身不提供很多功能，我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码，使用 Maven构建项目等功能需要依靠插件完成。</p> <p>接下来演示如何下载插件。</p> <h4 id="修改-jenkins-插件下载地址"><a href="#修改-jenkins-插件下载地址" class="header-anchor">#</a> 修改 Jenkins 插件下载地址</h4> <p>Jenkins国外官方插件地址下载速度非常慢，所以可以修改为国内插件地址。</p> <p>第一步：修改升级站点URL</p> <p>Jenkins-&gt;Manage Jenkins-&gt;Manage Plugins，点击Advanced</p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p><img src="/img/image-20220620163559917.png" alt="image-20220620163559917"></p> <p>第二步：修改下载URL</p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ <span class="token builtin class-name">cd</span> /var/lib/jenkins/updates/
$ <span class="token function">sed</span> -i <span class="token string">'s/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g'</span> default.json
$ <span class="token function">sed</span> -i <span class="token string">'s/http:\/\/www.google.com/https:\/\/www.baidu.com/g'</span> default.json
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>第三步：重启 Jenkins</p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>$ systemctl restart jenkins
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="汉化-jenkins"><a href="#汉化-jenkins" class="header-anchor">#</a> 汉化 Jenkins</h4> <p>默认情况下，Jenkins是英文的，可以使用插件汉化 Jenkins。</p> <p>Jenkins-&gt;Manage Jenkins-&gt;Manage Plugins，点击 Available</p> <p><img src="/img/image-20220620163208048.png" alt="image-20220620163208048"></p> <p><img src="/img/image-20220620163324398.png" alt="image-20220620163324398"></p> <h3 id="持续集成环境-3-jenkins用户权限管理"><a href="#持续集成环境-3-jenkins用户权限管理" class="header-anchor">#</a> 持续集成环境(3)-Jenkins用户权限管理</h3> <p>我们可以利用 <code>Role-based Authorization Strategy</code> 插件来管理Jenkins用户权限。</p> <h4 id="安装-role-based-authorization-strategy-插件"><a href="#安装-role-based-authorization-strategy-插件" class="header-anchor">#</a> 安装 Role-based Authorization Strategy 插件</h4> <p>Jenkins-&gt;Manage Jenkins-&gt;Manage Plugins，点击 Available</p> <p><img src="/img/image-20220620164333243.png" alt="image-20220620164333243"></p> <h4 id="开启权限全局安全配置"><a href="#开启权限全局安全配置" class="header-anchor">#</a> 开启权限全局安全配置</h4> <p>Jenkins -&gt; 全局安全配置</p> <p><img src="/img/image-20220620164614552.png" alt="image-20220620164614552"></p> <h4 id="创建角色"><a href="#创建角色" class="header-anchor">#</a> 创建角色</h4> <p>Jenkisn -&gt; Manage and Assign Roles</p> <p><img src="/img/image-20220620165104374.png" alt="image-20220620165104374"></p> <p><img src="/img/image-20220620165200596.png" alt="image-20220620165200596"></p> <ol><li>Global roles（全局角色）：管理员等高级用户可以创建基于全局的角色</li> <li>Project roles（项目角色）： 针对某个或者某些项目的角色</li> <li>Slave roles（奴隶角色）：节点相关的权限（用的地方不多，暂且不予以深究）</li></ol> <p>我们姑且可以创建三个角色，分别是一个全局角色，两个项目角色。</p> <ul><li>base：该角色为全局角色。这个角色需要绑定Overall下面的Read权限，是为了给所有用户绑 定最基本的Jenkins访问权限。注意：如果不给后续用户绑定这个角色，会报错误：用户名 is missing the Overall/Read permission</li> <li>role1：该角色为项目角色。使用正则表达式绑定&quot;xiaoyangaijishu-golang.*&quot;，意思是只能操作xiaoyangaijishu-golang开头的项目。</li> <li>role2：该角色也为项目角色。绑定&quot;xiaoyangaijishu-python.*&quot;，意思是只能操作xiaoyangaijishu-python开头的项目。</li></ul> <p><img src="/img/image-20220620165800968.png" alt="image-20220620165800968"></p> <p><img src="/img/image-20220620170756898.png" alt="image-20220620170756898"></p> <h4 id="创建用户"><a href="#创建用户" class="header-anchor">#</a> 创建用户</h4> <p>在系统管理页面进入管理用户。</p> <p><img src="/img/image-20220620170943884.png" alt="image-20220620170943884"></p> <p><img src="/img/image-20220620171031169.png" alt="image-20220620171031169"></p> <p><img src="/img/image-20220620171101880.png" alt="image-20220620171101880"></p> <h4 id="给用户分配角色"><a href="#给用户分配角色" class="header-anchor">#</a> 给用户分配角色</h4> <p>系统管理页面进入Manage and Assign Roles，点击Assign Roles</p> <p>绑定规则如下：</p> <ul><li>test1用户分别绑定base和role1角色</li> <li>test2用户分别绑定base和role2角色</li></ul> <p><img src="/img/image-20220620171302935.png" alt="image-20220620171302935"></p> <h4 id="创建项目测试权限"><a href="#创建项目测试权限" class="header-anchor">#</a> 创建项目测试权限</h4> <p>以admin管理员账户创建两个项目，分别为xiaoyangaijishu-golang-01和xiaoyangaijishu-python-01。</p> <p><img src="/img/image-20220620172000567.png" alt="image-20220620172000567"></p> <p>登录<code>test1</code>用户只看到``xiaoyangaijishu-golang-01`。登录test2用户亦然。</p> <p><img src="/img/image-20220620171943624.png" alt="image-20220620171943624"></p> <h3 id="持续集成环境-4-jenkins凭证管理"><a href="#持续集成环境-4-jenkins凭证管理" class="header-anchor">#</a> 持续集成环境(4)-Jenkins凭证管理</h3> <p>凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等，以便 Jenkins可以和这些第三方的应用进行交互。</p> <h4 id="安装credentials-binding插件"><a href="#安装credentials-binding插件" class="header-anchor">#</a> 安装Credentials Binding插件</h4> <p>要在Jenkins使用凭证管理功能，需要安装Credentials Binding插件。</p> <p><img src="/img/image-20220620172721251.png" alt="image-20220620172721251"></p> <ul><li>Username with password：用户名和密码</li> <li>SSH Username with private key： 使用SSH用户和密钥</li> <li>Secret file：需要保密的文本文件，使用时Jenkins会将文件复制到一个临时目录中，再将文件路径 设置到一个变量中，等构建结束后，所复制的Secret file就会被删除。</li> <li>Secret text：需要保存的一个加密的文本串，如钉钉机器人或Github的api token</li> <li>Certificate：通过上传证书文件的方式</li></ul> <p>接下来以使用Git工具到Gitlab拉取项目源码为例，演示Jenkins的如何管理Gitlab的凭证。</p> <h4 id="安装git插件和git工具"><a href="#安装git插件和git工具" class="header-anchor">#</a> 安装Git插件和Git工具</h4> <p>为了让Jenkins支持从Gitlab拉取源码，需要安装Git插件以及在CentOS7上安装Git工具。</p> <blockquote><p>注意：Jenkins 操作系统中必须安装 git，不然会报错。</p></blockquote> <h5 id="git插件安装"><a href="#git插件安装" class="header-anchor">#</a> Git插件安装</h5> <p><img src="/img/image-20220620173348301.png" alt="image-20220620173348301"></p> <h5 id="添加-ssh-类型的密钥"><a href="#添加-ssh-类型的密钥" class="header-anchor">#</a> 添加 SSH 类型的密钥</h5> <p>Jenkins --&gt; 系统管理 --&gt; Manage Credentials --&gt; 全局 --&gt; 添加凭证</p> <p><img src="/img/image-20220620173847121.png" alt="image-20220620173847121"></p> <p><img src="/img/image-20220620173935112.png" alt="image-20220620173935112"></p> <p>将公钥添加至 Gitlab 中。</p> <p><img src="/img/image-20220620174026652.png" alt="image-20220620174026652"></p> <p><img src="/img/image-20220620175618549.png" alt="image-20220620175618549"></p> <p><img src="/img/image-20220620175552529.png" alt="image-20220620175552529"></p> <p><img src="/img/image-20220620175734845.png" alt="image-20220620175734845"></p> <p><img src="/img/image-20220620180037367.png" alt="image-20220620180037367"></p> <h3 id="持续集成环境-5-参数化构建"><a href="#持续集成环境-5-参数化构建" class="header-anchor">#</a> 持续集成环境(5)-参数化构建</h3> <p>在面对多种场景，多种变化的的部署环境中，参数化构建是保证Jenkins部署多样性的非常重要的一环。</p> <p><a href="https://www.yuque.com/docs/share/32a1bfe2-ee46-4db6-9548-ff9a63a78743" target="_blank" rel="noopener noreferrer">猛戳这里<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <h3 id="持续集成环境-6-邮件服务"><a href="#持续集成环境-6-邮件服务" class="header-anchor">#</a> 持续集成环境(6)-邮件服务</h3> <p>邮件服务主要用来通知部署结果的，非常重要。</p> <h4 id="安装email-extension插件"><a href="#安装email-extension插件" class="header-anchor">#</a> 安装Email Extension插件</h4> <p>Jenkins-&gt;Manage Jenkins-&gt;Manage Plugins，点击 Available</p> <p><img src="/img/image-20220620184322270.png" alt="image-20220620184322270"></p> <h4 id="jenkins设置邮箱相关参数"><a href="#jenkins设置邮箱相关参数" class="header-anchor">#</a> Jenkins设置邮箱相关参数</h4> <p>Jenkins --&gt; Manage Jenkins -&gt; Configure System</p> <p><img src="/img/image-20220620184605785.png" alt="image-20220620184605785"></p> <h5 id="设置邮件参数"><a href="#设置邮件参数" class="header-anchor">#</a> 设置邮件参数</h5> <p><img src="/img/image-20220620185003332.png" alt="image-20220620185003332"></p> <p><img src="/img/image-20220620193919320.png" alt="image-20220620193919320"></p> <p><img src="/img/image-20220620193951389.png" alt="image-20220620193951389"></p> <p><img src="/img/image-20220620194029055.png" alt="image-20220620194029055"></p></div></div>  <div class="page-edit"><div class="edit-link"><a href="https://github.com//edit/master/docs/05.DevOps/03.jenkins/01.Jenkins入门.md" target="_blank" rel="noopener noreferrer">编辑</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----> <div class="last-updated"><span class="prefix">上次更新:</span> <span class="time">2022/06/24, 12:24:14</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><a href="/pages/fb2fff/" class="page-nav-centre page-nav-centre-prev"><div class="tooltip">02、GitLab</div></a> <a href="/pages/c6f51e/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">Jenkins流水线语法</div></a></div> <div class="page-nav"><p class="inner"><span class="prev">
        ←
        <a href="/pages/fb2fff/" class="prev">02、GitLab</a></span> <span class="next"><a href="/pages/c6f51e/">Jenkins流水线语法</a>→
      </span></p></div></div></div> <div class="article-list"><div class="article-title"><a href="/archives/" class="iconfont icon-bi">最近更新</a></div> <div class="article-wrapper"><dl><dd>01</dd> <dt><a href="/pages/894626/"><div>
            企业级流水线的两种部署场景
            <!----></div></a> <span class="date">06-23</span></dt></dl><dl><dd>02</dd> <dt><a href="/pages/bc4b74/"><div>
            Jenkins集成各种工具
            <!----></div></a> <span class="date">06-23</span></dt></dl><dl><dd>03</dd> <dt><a href="/pages/c6f51e/"><div>
            Jenkins流水线语法
            <!----></div></a> <span class="date">06-23</span></dt></dl> <dl><dd></dd> <dt><a href="/archives/" class="more">更多文章&gt;</a></dt></dl></div></div></main></div> <div class="footer"><div class="icons"><a href="mailto:chenyangqit@163.com" title="发邮件" target="_blank" class="iconfont icon-youjian"></a><a href="https://juejin.cn/user/730513894553032/course" title="掘金" target="_blank" class="iconfont icon-juejin"></a><a href="/img/weixin.jpg" title="微信" target="_blank" class="iconfont icon-weixin"></a><a href="https://music.163.com/#/playlist?id=755597173" title="听音乐" target="_blank" class="iconfont icon-erji"></a></div> 
  Theme by
  <a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="本站主题">Vdoing</a> 
    | Copyright © 2019-2022
    <span>小阳爱技术 | <a href="https://blog.abck8s.com" target="_blank">MIT License</a></span></div> <div class="buttons"><div title="返回顶部" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="去评论" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="主题模式" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong">
          跟随系统
        </li><li class="iconfont icon-rijianmoshi">
          浅色模式
        </li><li class="iconfont icon-yejianmoshi">
          深色模式
        </li><li class="iconfont icon-yuedu">
          阅读模式
        </li></ul></div></div> <!----> <!----> <!----></div><div class="global-ui"><div></div></div></div>
    <script src="/assets/js/app.9f33dad1.js" defer></script><script src="/assets/js/2.336839c5.js" defer></script><script src="/assets/js/27.23a56743.js" defer></script>
  </body>
</html>
